import type { PropType } from 'vue';
import { propTypes } from '@/utils/propTypes';
import type { BasicColumn, TableSetting } from './types/table';
// import type { ElTable } from 'element-plus';

/**
 * 基本属性配置对象
 */
export const basicProps = {
  // ...ElTable, // 这里继承原 UI 组件的 props
  /**
   * 表格布局方式
   */
  tableLayout: {
    type: String,
    default: 'auto',
  },
  /**
   * 表格标题
   */
  title: {
    type: String,
    default: null,
  },
  /**
   * 表格标题的提示文本
   */
  titleTooltip: {
    type: String,
    default: null,
  },
  /**
   * 是否显示表格边框
   */
  border: {
    type: Boolean,
    default: false,
  },
  /**
   * 表格的最大高度
   */
  maxHeight: {
    type: Number,
  },
  /**
   * 表格尺寸
   */
  size: {
    type: String,
    default: 'default',
  },
  /**
   * 表格数据源，可以是一个函数或数组
   */
  dataSource: {
    type: [Function, Array],
    default: () => [],
  },
  /**
   * 表格列的配置数组
   */
  columns: {
    type: [Array] as PropType<BasicColumn[]>,
    default: () => [],
    required: true,
  },
  /**
   * 请求数据的方法，一个函数
   */
  request: {
    type: Function as PropType<(...arg: any[]) => Promise<any>>,
    default: null,
  },
  /**
   * 每行数据的唯一标识，可以是字符串或函数
   */
  rowKey: {
    type: [String, Function] as PropType<string | ((record) => string)>,
    default: undefined,
  },
  /**
   * 每行数据的样式类名，可以是字符串或函数
   */
  rowClassName: {
    type: [String, Function] as PropType<string | ((record) => string)>,
    default: undefined,
  },
  /**
   * 分页配置，可以是一个对象或布尔值
   */
  pagination: {
    type: [Object, Boolean],
    default: () => {},
  },
  /**
   * 是否显示分页器，可以是字符串或布尔值
   */
  showPagination: {
    type: [String, Boolean],
    default: 'auto',
  },
  /**
   * 操作列的配置对象
   */
  actionColumn: {
    type: Object as PropType<BasicColumn>,
    default: null,
  },
  /**
   * 是否显示表格设置
   */
  showTableSetting: {
    type: Boolean,
    default: true,
  },
  /**
   * 表格设置的配置对象
   */
  tableSetting: {
    type: Object as PropType<TableSetting>,
    default: () => ({
      width: 230,
      redo: true,
      size: true,
      setting: true,
      fullscreen: true,
      striped: true,
      //AdvancedTable 组件独有
      query: false,
    }),
  },
  /**
   * 是否显示斑马纹
   */
  striped: {
    type: Boolean,
    default: false,
  },
  /**
   * 是否高亮选中行
   */
  checkedRowAlert: {
    type: Boolean,
    default: false,
  },
  /**
   * 是否允许调整表格大小
   */
  canResize: propTypes.bool.def(true),
  /**
   * 调整表格高度的偏移量
   */
  resizeHeightOffset: propTypes.number.def(0),
  /**
   * 是否保留行的唯一标识
   */
  isKeepRowKeys: {
    type: Boolean,
    default: false,
  },
};
